The invention relates to a method of operating a storage system comprising a main memory and a cache memory structured in address-related lines, in which cache memory can be loaded with data from the main memory and be read out by a processor as required. During the access of the processor to data of a certain address in the cache memory, at which address certain data from the main memory which has a corresponding address is stored, a test is made to determine whether sequential data is stored at the next address in the cache memory; and this sequential data, if unavailable, can be loaded from the main memory in the cache memory via a prefetch.
In known storage systems, a plurality of data stored in the main memory are loaded in a cache memory already prior to their being called by an assigned processor, which runs a respective program. A cache memory is a high-speed buffer memory from which the necessary data is made available to the processor in a considerably faster way than from the main memory, which operates much more slowly. To ensure that in most cases the data required by the processor is available in the cache memory, the prefetch has come to be used. In the case of a prefetch operation, data which is not yet required by the processor for the moment, but which will probably shortly be required based on the processor access to the cache memory, has already previously been loaded from the main memory into the cache memory or a register, so that it is then available when the processor needs this data. A cache memory is subdivided into a plurality of lines which are typically also structured in columns, and each cache memory line is assigned a certain address line. In each line of the cache memory, a line of the main memory is written, and the line address of the cache memory corresponds to that of the main memory. Each line thus written has a certain length over. The mode of operation of such a storage system is such that when a hit occurs in the cache line N, which contains the data of the main memory address A, simultaneously a test is made to determine whether the data of the address  less than A plus line length greater than  is available in the cache line N+1. Thus, assuming a hit in the cache line N, a check is invariably made whether the next line contains sequential data which the processor will probably need shortly. If this is not the case, a prefetch operation follows in which the data of the address  less than A plus line length greater than  is loaded either in the cache memory or in an assigned register.
Basically, the use of prefetch for a cache memory increases the hit rate in the cache memory achieved by the processor. A high hit rate in its turn leads to a better performance of the system, because the memory access can be carried out without delay in case of a hit, whereas a miss leads to an access to the slower main memory and decelerates the system.
As a result of the use of prefetch, there are also disadvantages. Data is loaded from the main memory in the cache memory that may not be needed at all. This hazard particularly exists in the case of large line lengths that cause a large amount of data to be transmitted to the cache memory during a prefetch operation. Since each data transfer increases power consumption, power loss increases. Moreover, a conflict arises when during a prefetch operation a miss happens in the cache memory (the processor does not find the desired data there). The prefetch operation must then be either aborted or terminated before the necessary data can be loaded. In both cases additional delays arise, which reduce the efficiency of the system.
It is therefore an object of the invention to provide a method of operating a storage system that improves the efficiency of the system when a prefetch strategy is used and that reduces power consumption.
To solve this problem, a method is provided wherein a prefetch only takes place when the processor accesses a predefined line section that lies within a line.
During the test of whether sequential data is available, only if it is missing will a prefetch be carried out. Advantageously, according to the invention, a prefetch operation is not initiated until the processor accesses data that lies in a predefined line section within a line. The prefetch is based on the recognition that the probability that the data of the line sequentially following the processed line is needed by the processor is proportionally greater the further away in the line N the hit lies, or that the processor reads out data. Then the assumption is strengthened that the processor that reads out the data of the line N will shortly need the sequential data of the next line N+1 as it is stored in the main memory. As a result of the definition of a certain line section, which defines the part of a line which the processor is to access for a prefetch operation to actually occur, the above probability can be taken into account. If the processor accesses an address in the line that lies outside the predefined line section, a prefetch cannot (yet) be initiated.
As a result, the efficiency of the system can be enhanced, because a prefetch operation is not initiated until it is highly likely that the data fetched from the main memory is also really used. A prefetch is thus not automatically carried out each time it is established that the sequential data is not available, but only in preferred cases. This lowers the number of prefetch operations carried out during a program run, leading to a drop in power consumption, which is caused by the loading of data in the cache memory or its associated register. In contrast to a conventional prefetch strategy, the power consumption for the data transfer may be lowered by more than 30% because of improved system efficiency. A specially preferred application of this prefetch strategy lies in the area of mobile radio telephony, i.e., when the storage system is used in a mobile radio telephony terminal.
For simplicity, the line section can be defined in accordance with the invention by a predetermined line section address and can contain all the addresses of a line that are larger than or equal to the line section address. The address within the line which the processor has access to is compared to the line section address so as to establish via this comparison whether the processor now works within or without the predefined line section, so that a decision can be made whether a prefetch can be initiated or not. The placement or selection of the line section address ultimately depends on the power parameters of the processor (e.g., the processor clock and the rate of the transmission of data from the main memory), but also on the structure of the program which is run by the processor. In particular, the structure of the program determines whether the processor continuously processes the dataxe2x80x94in essence, line-address by line-address or line by linexe2x80x94or whether during the running of the program there are many line jumps. Basically, the line section address is to be positioned so that in the majority of cases the prefetch operation has already been terminated before the data is accessed by the processor.
Each line of the cache memory can be subdivided into a plurality of line areas of a certain length, each of which is assigned its own line area address, and the line area address is then compared to the line section address. This takes into account the possibility of configuring a cache memory in various forms, one of which is the subdivision of each cache memory line or of the whole cache memory into a plurality of columns, the columns having different lengths depending on the cache memory configuration. In each line area can be written a certain amount of data which can be retrieved with the aid of the line area address, which is compared to the line section address to test the xe2x80x9ctype of jobxe2x80x9d of the processor within the line. The line section address can be given in the form of a number value, and a comparative value is determined on the basis of the line section address which the processor has just accessed. In accordance with an advantageous further embodiment of the inventive idea there may be provided a plurality of line sections of different lengths, and the line section to be taken into account for determining whether or not a prefetch to be performed is selected in dependence on the program section of a program to be run by the processor, i.e., the program section the processor is in at the time the prefetch is being determined. The line section or line section address, is changed by the program itself during the run time of the program. According to this embodiment of the invention, a dynamic change of the line section has thus been realized, so that it is possible for various program sections which each have different structures to define separate line sections and for each program section to separately define the initiating conditions for a prefetch. In this manner, various program structures may be responded to. If the decision about the initiation of the prefetch operation is implemented so that it can be configured by means of software, the dynamic change of this parameter is possible.
In addition to the foregoing method, the invention further relates to a data storage system comprising a main memory and a cache memory structured in a plurality of lines in which data read from the main memory can be written and read out as required by a processor, and a prefetch means for determining whether a prefetch of data from the main memory for transmission to the cache memory should take place, and for performing a prefetch. In the prefetch means at least one line section address is or can be determined which relates to the length of the line of the cache memory, by which means a line section in the line of the cache memory is defined. The prefetch means compares the line section address with an address in a line which the processor has access to, for determining whether the access takes place within the line section, and for performing a prefetch in dependence on the result of the comparison.
Each line of the cache memory can be subdivided into a plurality of line areas which have each having a separate line area address for comparison with the line section address(denoting what part of the line the processor has access to) and is compared by the prefetch means with the line section address to find out whether a prefetch is called for at all.
It has further turned out to be advantageous that when a plurality of line section addresses are determined or can be determined for determining a plurality of line sections, the line section address to be used for a comparison is selected in dependence on the program section of a program run by the processor during its access to the cache memory.
In order to avoid the need for data loaded from the main memory in a prefetch to be written directly in the cache memory, it has proved to be advantageous for the cache memory to include a register memory in which the prefetch data can be written by the prefetch means. When the prefetch data stored in the register memory of the cache memory is needed, it is transferred by the register memory to the processor and also stored in the cache memory for subsequent accesses.
When only one register memory is used, there may be the case where, after prefetch data has been written in the register memory, the program jumps to another cache memory line where a new prefetch becomes necessary. The old prefetch data in the register memory has not yet been read out, but can be re-used shortly when the program returns. Since there is only one register memory available, the old prefetch data is overwritten by the new prefetch. If the program returns again, a renewed prefetch may be necessary. In this instance, it has proved to be advantageous to provide a plurality of register memories in which the respective prefetch data of various prefetch operations can be written. Prefetch data to be written for the first time should be written in the register memory in which the oldest prefetch data is present, which is then overwritten.